#include<bits/stdc++.h>
using namespace std;

const int N=60;

int n;
int nex[N];
int top[N];
int head[N];
int ans=0;
set<int> dset;

void dfs(int c)
{
    bool put=false;
    for(int i=1;i<=n;i++){
        if(head[i]==0){
            head[i]=c;
            top[i]=c;
            put=true;
            dfs(c+1);
            top[i]=0;
            break;
        }
        else{
            int top0=top[i];
            if(dset.count(top[i]+c)){
                top[i]=c;
                nex[top0]=c;
                put=true;
                dfs(c+1);
                top[i]=top0;
                nex[top0]=0;
            }
        }
    }
    if(put){
        ans=max(ans,c);
    }
}
int main(){
    for(int i=2;i<=200;i++){
        dset.insert(i*i);
    }
    scanf("%d",&n);
    memset(top,0,sizeof(top));
    memset(head,0,sizeof(head));
    dfs(1);
    printf("%d\n",ans);
}